package com.hisense.hisensedatacheck.uitls;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

//规则校验工具类
public class Verify {
    //    判断非空 true代表空
    //“行政处罚决定书文号”为空时错误
    //“行政相对人类别”为法人及非法人组织、个体工商户时，“法定代表人”必填
    //“行政相对人类别”为法人及非法人组织、个体工商户时,“证件类型”必须为空
//“行政相对人类别”为法人及非法人组织、个体工商户时,“证件号码”必须为空
    public static Boolean isNull(Object object) {
        return null == object || object.toString().length() == 0 || object.toString().equals("NULL");
    }

    //    “行政相对人名称”包含中英文问号代表true
    public static Boolean isWenHao(Object object) {
        if (object == null || object.toString().length() == 0) {
            return false;
        }
        String pattern = ".*(？|\\?).*";
        return object.toString().matches(pattern);
    }

    //    判断长度 大于length返回true
    //“组织机构代码”长度超过9个字符
    //“税务登记号”字符长度超过15个字符
    //“事业单位证书号”长度超过12个字符
    //“社会组织登记证号”长度超过50个字符
    //“行政相对人类别”为法人及非法人组织、个体工商户时，“法定代表人”长度超过50个字符
    public static Boolean isLength(Object object, int length) {
        if (object == null || object.toString().length() == 0) {
            return false;
        }
        return object.toString().length() > length;
    }

    //    判断包含*或null或test 返回true  空值为false
    public static Boolean isNullOrTrueOrXingHao(Object object) {
        if (object == null || object.toString().length() == 0) {
            return false;
        }
        String pattern = "^.*(?i)(\\*|test|null).*$";
        return object.toString().matches(pattern);
    }

    //    长度必须大于一个汉字或大于三个字符 否则true
    public static Boolean isZiFuChangDu(Object object) {
        if (object == null || object.toString().length() == 0) {
            return false;
        }
        String pattern = "^(.+[\\u4e00-\\u9fa5]|[\\u4e00-\\u9fa5].+|.+[\\u4e00-\\u9fa5].+|[^\\u4e00-\\u9fa5]{4,})$";
        return !object.toString().matches(pattern);
//        根据sql规则修改
//      return  object.toString().length()<3;
    }

    //    “行政相对人类别”取值不符合字典表范围 返回true 法人及非法人组织', '个体工商户
    public static Boolean isXzxdrlb(Object object) {
        if (object == null || object.toString().length() == 0) {
            return false;
        }
        return !(object.toString().equals("法人及非法人组织")||object.toString().equals("个体工商户"));
    }


    //“行政相对人类别”为法人及非法人组织时，“统一社会信用代码”校验错误
//“行政相对人类别”为个体工商户时，“统一社会信用代码”校验错误
    public static Boolean isTyshxydm( Object tyshxydm) {
        if (tyshxydm == null || tyshxydm.toString().length() == 0) {
            return true;
            //校验统一社会信用代码格式
        } else if (XinYongJiaoYan.isValidSocialCreditCode(tyshxydm.toString())) {
            return false;
        }else{
            return true;
        }
    }

    //“行政相对人类别”为法人及非法人组织、个体工商户，且统一社会信用代码为17个0+X时，“工商注册号”必填
    public static Boolean isTyshxydmAndGszch( Object tyshxydm, Object gszch) {
        if (tyshxydm == null || tyshxydm.toString().length() == 0) {
            return false;
        }
        if (tyshxydm.toString().equals("00000000000000000X")) {
            if(gszch == null || gszch.toString().length() == 0){
                return true;
            }
            return false;
        }
        return false;
    }

    //“行政相对人类别”为法人及非法人组织、个体工商户，且统一社会信用代码为17个0+X时,“工商注册号”长度超过50个字符
//    和isXzxdrlbAndTyshxydmAndGszch一起使用
    public static Boolean isTyshxydmAndGszchSize(Object tyshxydm,Object gszch) {
        if (tyshxydm == null || tyshxydm.toString().length() == 0 ||gszch==null || gszch.toString().length() == 0) {
            return false;
        }
        if (tyshxydm.toString().equals("00000000000000000X")) {
            if(gszch.toString().length() > 50){
                return true;
            }
            return false;
        }
        return false;

    }

    //“工商注册号”包含中文
    //“组织机构代码”包含中文
    //“税务登记号”包含中文
    //“事业单位证书号”包含中文
    //“社会组织登记证号”包含中文
    public static Boolean isZhongWen(Object object) {
        if (object == null || object.toString().length() == 0) {
            return false;
        }
        String pattern = "[^\u4e00-\u9fa5]*";
        return !object.toString().matches(pattern);
    }

    //“工商注册号”含有除数字或字母之外的字符
    //“组织机构代码”含有除数字或字母之外的字符
    //“税务登记号”含有除数字或字母之外的字符
    //“事业单位证书号”含有除数字或字母之外的字符
    //“社会组织登记证号”含有除数字或字母之外的字符
    public static Boolean isNotShuZiOrZiMu(Object object) {
        if (object == null || object.toString().length() == 0) {
            return false;
        }
        String pattern = "[A-Za-z0-9]*";
        return !object.toString().matches(pattern);
    }


    //“行政相对人类别”为法人及非法人组织、个体工商户时，“法定代表人”不得包含数字
    public static Boolean isShuZi(Object object) {
        if (object == null || object.toString().length() == 0) {
            return false;
        }
        String pattern = "[^0-9]*";
        return !object.toString().matches(pattern);
    }

    //“行政相对人类别”为法人及非法人组织、个体工商户时，且法定代表人证件号码不为空时，“法定代表人证件类型”必填
    public static Boolean isShuZi(Object zjhm, Object zjlx) {
        if (zjhm == null || zjhm.toString().length() == 0) {
            return false;
        }
        return zjlx == null || zjlx.toString().length() == 0;
    }

    //“法定代表人证件类型”取值不符合字典表范围
    public static Boolean isFddbrzjlx(Object fddbrzjlx) {
        if (fddbrzjlx == null || fddbrzjlx.toString().length() == 0) {
            return false;
        }
        String pattern = "身份证|护照号|港澳居民来往内地通行证|台湾居民来往大陆通行证|外国人永久居留身份证";
        return !fddbrzjlx.toString().matches(pattern);
    }

    //“法定代表人证件类型”为“身份证”时，身份证号码校验错误
    public static Boolean fddbrzjlxIsShenFenZheng(Object fddbrzjlx, Object sfzh) {
        if (fddbrzjlx == null || fddbrzjlx.toString().length() == 0 || (!fddbrzjlx.toString().equals("身份证"))) {
            return false;
        }
        if (sfzh == null || sfzh.toString().length() == 0 ) {
            return true;
        }
        String pattern = "^([1-9]\\d{5}\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3})|([1-9]\\d{5}(18|19|([23]\\d))\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx])$";
        return !sfzh.toString().matches(pattern);
    }
    //比较日期
    public static Boolean riQiPanDuan(Date date1, Date date2) {
        if(date1==null || date2==null){
            return true;
        }
        return date1.getTime() > date2.getTime();
    }

    //   “公示截止期”时间不合法
    public static Boolean riQiXiaoYan(Date date) {
        if (date == null || date.toString().length() == 0) {
            return true;
        }
        Date maxParse = null;
        Date minParse =null;
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        try {
            maxParse = simpleDateFormat.parse("2099-12-31");
            minParse= simpleDateFormat.parse("1949-10-01");
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date.getTime() > maxParse.getTime()|| date.getTime()<minParse.getTime();
    }
    ////“处罚类别”不存在字典表或者不是以“其他-”开头
//    public Boolean cflb(Object object){
//        if(object==null ||object.toString().length()==0){
//            return true;
//        }
//    }
//“处罚类别”包含罚款时，罚款金额必填且处罚金额必须大于0
    public static Boolean cflbAndFaKuan(Object cflb, Object fk) {
        if (cflb == null || cflb.toString().length() == 0) {
            return false;
        }
        if (cflb.toString().contains("罚款")) {
            if (fk == null || fk.toString().length() == 0) {
                return true;
            }
        }
        return false;
    }

    //“处罚类别”包含没收违法所得、没收非法财物时，没收违法所得、没收非法财物的金额必填且没收违法所得、没收非法财物的金额必须大于或等于0
    public static Boolean cflbAndWfcw(Object cflb, Object wfcw) {
        if (cflb == null || cflb.toString().length() == 0) {
            return false;
        }
        if (cflb.toString().contains("没收违法所得、没收非法财物")) {
            if (wfcw == null || wfcw.toString().length() == 0) {
                return false;
            }
            if (Double.parseDouble(wfcw.toString()) < 0) {
                return true;
            }
        }
        return false;
    }
    //“处罚类别”包含暂扣或者吊销许可证、暂扣或者吊销执照时，暂扣或吊销证照名称及编号必填
    public static Boolean cflbAndYyzz(Object cflb, Object zzmc) {
        if (cflb == null || cflb.toString().length() == 0) {
            return false;
        }
        if (cflb.toString().contains("暂扣或者吊销许可证")||cflb.toString().contains("暂扣或者吊销执照")) {
            if (zzmc == null || zzmc.toString().length() == 0) {
                return true;
            }
        }
        return false;
    }
//    “行政相对人名称”不能为空或包含|/\符号
public static Boolean isShugGangAndXieGangAndNull(Object object){
    if (object == null || object.toString().length() == 0) {
        return true;
    }
    String pattern = "[^\\?|(\\\\)|\\/]*";
    return !object.toString().matches(pattern);
}

    public static Boolean chuFaLeiBieJiaoYan(Object object){
        if (object == null || object.toString().length() == 0) {
            return false;
        }
        String pattern = "(警告|罚款|没收违法所得、没收非法财物|责令停产停业|暂扣或者吊销许可证、暂扣或者吊销执照|行政拘留|其他-[^;]+)";
        return !object.toString().matches(pattern);
    }
    public static Boolean xuKeLeiBieJiaoYan(Object object){
        if (object == null || object.toString().length() == 0) {
            return false;
        }
        if(object.toString().contains("其他")){
            String pattern = "其他-[^;]+";
            return !object.toString().matches(pattern);
        }
        return false;
    }

    public static Boolean NotZiRanRen(Object object) {
        if (object == null || object.toString().length() == 0) {
            return false;
        }
        return !object.toString().equals("自然人");
    }
    //疑问数据（决定机关代码/数据来源单位代码）
    public static Boolean yiWenShuJu(Object object) {
        if (object == null || object.toString().length() == 0) {
            return false;
        }
        String pattern = "^9.*$";
        return object.toString().matches(pattern);
    }
//    xk_xklb NOT IN ('普通', '特许', '认可', '核准', '登记') AND xk_xklb NOT LIKE '其他-%';
public static Boolean xuKeLeiBie(Object object) {
    if (object == null || object.toString().length() == 0) {
        return true;
    }
    String pattern = "^(普通|特许|认可|核准|登记)|其他-.*$";
    return !object.toString().matches(pattern);
}
}
